#include "Vector.h"
#include <func.h>

#define DEFAULT_CAPACITY 16

// 初始化成空的动态数组
void vector_init(Vector* v)
{
	v->size = 0;
	v->capacity = 0;
	v->elements = NULL; // Lazy
}

void vector_destroy(Vector* v)
{
	if (v->elements) {
		free(v->elements);
		vector_init(v);
	}
}

static void grow_capacity(Vector* v)
{
	// 计算新数组的容量
	int new_capacity = v->capacity < DEFAULT_CAPACITY ?
		DEFAULT_CAPACITY : (v->capacity << 1);
	// 扩容
	// 惯用法
	E* p = (E*) realloc(v->elements, new_capacity * sizeof(E));
	if (!p) {
		printf("Error: realloc failed\n");
		exit(1);
	}
	// 扩容成功
	v->capacity = new_capacity;
	v->elements = p;
}

void vector_add(Vector* v, size_t index, E e)
{
	if (index >= v->capacity) {
		grow_capacity(v);
	}
	v->elements[index] = e;
	v->size++;
}
